/**
 * Fichier JpaDaoService.java : Définition de classe
 * fr.unice.gnpt.core.dao.jpa.JpaDaoService : Fabrique de DAO de type Service
 * pour JPA
 * 
 * Auteurs : Groupe GNPT : Gastinel, Nicolas, Pellegrino, Trovato
 */
package fr.unice.gnpt.core.dao.jpa;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Properties;

import javax.persistence.Query;

import fr.unice.gnpt.core.Enseignement;
import fr.unice.gnpt.core.Service;
import fr.unice.gnpt.core.TacheAdministrative;
import fr.unice.gnpt.core.dao.DaoException;
import fr.unice.gnpt.core.dao.DaoService;

/**
 * Classe de gestion de DAO de type Service pour JPA.
 * 
 * @author gnpt
 * @version 0.1.2
 */
public class JpaDaoService extends JpaDaoGenerique<Service, Long> implements
		DaoService {
	/**
	 * Constructeur par défaut.
	 * 
	 * @param proprietesConnexion
	 *            les propriétés de connexion à passer au DAO, contenant les
	 *            informations nécessaires pour que le DAO puisse se connecter
	 *            avec JPA.
	 */
	public JpaDaoService(Properties proprietesConnexion) {
		super(Service.class, proprietesConnexion);
	}

	/**
	 * @throws DaoException
	 * @see fr.unice.gnpt.core.dao.DaoService#findAllEnseignements()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Collection<Enseignement> findAllEnseignements() throws DaoException {
		Query q;
		Collection<Enseignement> enseignements = new ArrayList<Enseignement>();

		try {
			q = this.getConnexion().getConnexion().createNamedQuery(
					"Service.findAllEnseignements");
		} catch (Exception e) {
			throw new DaoException(
					"Erreur lors de la requête nommée JPA Service.findAllEnseignementsAttribues.",
					e);
		}

		for (Enseignement e : (List<Enseignement>) q.getResultList()) {
			enseignements.add(e);
		}

		return enseignements;
	}

	/**
	 * @see fr.unice.gnpt.core.dao.DaoService#findAllTachesAdministratives()
	 */
	@SuppressWarnings("unchecked")
	@Override
	public Collection<TacheAdministrative> findAllTachesAdministratives()
			throws DaoException {
		Query q;
		Collection<TacheAdministrative> taches = new ArrayList<TacheAdministrative>();

		try {
			q = this.getConnexion().getConnexion().createNamedQuery(
					"Service.findAllServices");
		} catch (Exception e) {
			throw new DaoException(
					"Erreur lors de la requête nommée JPA Service.findAllServicesAttribues.",
					e);
		}

		for (Service s : (List<Service>) q.getResultList()) {
			if (s instanceof TacheAdministrative) {
				taches.add((TacheAdministrative) s);
			}
		}

		return taches;
	}
}
